<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Area extends Model
{
    protected $table = 'c_china_area';

    /**
     * @param $id
     * @return mixed
     * 通过ID获取地区名称
     */
    public static function getNameById($id)
    {
        return self::where([['id', '=', $id]])->value("name");
    }

    public function getAddressByPid($param)
    {
        if (!isset($param['p_id']) ) {
            $param['p_id'] = 1;
        }
        return $this->where([['parent_id', '=', $param['p_id']]])->get()->toArray();
    }

    /**
     * @param $id
     * @return mixed
     * 通过code查名字
     */
    public static function getNameByCode($code)
    {
        return self::where([['code', '=', $code]])->value("name");
    }

    public function getAreasList()
    {
        $area = $this->orderBy(DB::raw('convert(name using gbk)'))
//            ->where([['parent_id','!=',1],['parent_id','!=',0]])
            ->get()->toArray();
        $settlesRes = array();
        foreach ($area as $k => $v) {
            $snameFirstChar = $this->get_letter($v['name']); //取出门店的第一个汉字的首字母
            $settlesRes[$snameFirstChar][] = $v;
        }
        return $settlesRes;
    }

    public function getfirstchar($s0)
    {
        $fchar = ord(substr($s0, 0, 1));
        if (($fchar >= ord("a") and $fchar <= ord("z")) or ($fchar >= ord("A") and $fchar <= ord("Z"))) return strtoupper(chr($fchar));
        $s = iconv("UTF-8", "GBK", $s0);
        $asc = ord($s[0]) * 256 + ord($s[1]) - 65536;
        if ($asc >= -20319 and $asc <= -20284) return "A";
        if ($asc >= -20283 and $asc <= -19776) return "B";
        if ($asc >= -19775 and $asc <= -19219) return "C";
        if ($asc >= -19218 and $asc <= -18711) return "D";
        if ($asc >= -18710 and $asc <= -18527) return "E";
        if ($asc >= -18526 and $asc <= -18240) return "F";
        if ($asc >= -18239 and $asc <= -17923) return "G";
        if ($asc >= -17922 and $asc <= -17418) return "H";
        if ($asc >= -17417 and $asc <= -16475) return "J";
        if ($asc >= -16474 and $asc <= -16213) return "K";
        if ($asc >= -16212 and $asc <= -15641) return "L";
        if ($asc >= -15640 and $asc <= -15166) return "M";
        if ($asc >= -15165 and $asc <= -14923) return "N";
        if ($asc >= -14922 and $asc <= -14915) return "O";
        if ($asc >= -14914 and $asc <= -14631) return "P";
        if ($asc >= -14630 and $asc <= -14150) return "Q";
        if ($asc >= -14149 and $asc <= -14091) return "R";
        if ($asc >= -14090 and $asc <= -13319) return "S";
        if ($asc >= -13318 and $asc <= -12839) return "T";
        if ($asc >= -12838 and $asc <= -12557) return "W";
        if ($asc >= -12556 and $asc <= -11848) return "X";
        if ($asc >= -11847 and $asc <= -11056) return "Y";
        if ($asc >= -11055 and $asc <= -10247) return "Z";
        return null;
    }

    public function mb_str_split($string)
    {
        return preg_split('/(?<!^)(?!$)/u', $string);
    }

    public function get_letter($string)
    {
        $charlist = $this->mb_str_split($string);
        $str = implode(',', $charlist);
        return $this->getfirstchar($str);
    }

    public function getAddressDetail($id)
    {
        $county = $this->where([['id', '=', $id]])->first();
        $city = $this->where([['id', '=', $county->parent_id]])->first();
        $provice = $this->where([['id', '=', $city->parent_id]])->first();
        return $provice->name . $city->name . $county->name;
    }
}
